home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2006 May / PCpro_2006_05.ISO / files / mobile / fma-2.0-stable-setup.exe / {app} / source / uExploreView.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2004-06-30  |  8.5 KB  |  291 lines

  1. unit uExploreView;
  2.  
  3. {
  4. *******************************************************************************
  5. * Descriptions: Main Unit for FMA
  6. * $Source: /cvsroot/fma/fma/uExploreView.pas,v $
  7. * $Locker:  $
  8. *
  9. * Todo:
  10. *   - add full popup menu
  11. *
  12. * Change Log:
  13. * $Log: uExploreView.pas,v $
  14. * Revision 1.13  2004/06/30 15:25:53  z_stoichev
  15. * Added Create Group menu item
  16. *
  17. * Revision 1.12  2004/06/27 21:19:21  z_stoichev
  18. * Explore phone WAP bookmarks.
  19. *
  20. * Revision 1.11  2004/06/25 15:23:27  z_stoichev
  21. * Bookmark support
  22. *
  23. * Revision 1.10  2004/06/24 09:06:06  z_stoichev
  24. * - Added Chat to Contact command to various popup menus.
  25. * - Added Add to Phonebook to various popup menus.
  26. *
  27. * Revision 1.9  2004/06/19 11:17:31  z_stoichev
  28. * - Changed Contact Group icons.
  29. *
  30. * Revision 1.8  2004/05/21 12:03:09  z_stoichev
  31. * Profile context menu and properties.
  32. *
  33. * Revision 1.7  2004/05/19 18:34:15  z_stoichev
  34. * Build 0.1.0.35c
  35. *
  36. * Revision 1.6  2004/04/01 15:30:28  z_stoichev
  37. * New Calls data format support
  38. *
  39. * Revision 1.5  2004/03/08 15:53:52  z_stoichev
  40. * Fixed Explorer view foder types.
  41. * Added Explorer view default properties.
  42. *
  43. * Revision 1.4  2004/01/28 17:13:09  z_stoichev
  44. * Popup menu rearranged.
  45. *
  46. * Revision 1.3  2003/12/12 12:57:22  z_stoichev
  47. * Add delete file support.
  48. * Add properties link.
  49. * Add customize view support.
  50. *
  51. * Revision 1.2  2003/11/28 09:38:07  z_stoichev
  52. * Merged with branch-release-1-1 (Fma 0.10.28c)
  53. *
  54. * Revision 1.1.2.8  2003/11/21 16:18:30  z_stoichev
  55. * Show calls time in second column.
  56. *
  57. * Revision 1.1.2.7  2003/11/14 15:41:02  z_stoichev
  58. * Updates for patch 27d.
  59. *
  60. * Revision 1.1.2.6  2003/11/13 16:39:54  z_stoichev
  61. * Add more items type support.
  62. *
  63. * Revision 1.1.2.5  2003/11/11 13:18:12  z_stoichev
  64. * Update since new icons.
  65. * Optimized contents reload.
  66. *
  67. * Revision 1.1.2.4  2003/11/10 14:03:09  z_stoichev
  68. * RC3
  69. *
  70. * Revision 1.1.2.3  2003/11/06 16:27:20  z_stoichev
  71. * Popup menu expanded.
  72. * Dont show -1 size.
  73. *
  74. * Revision 1.1.2.2  2003/11/04 12:27:26  z_stoichev
  75. * Display size in Kb for files and hide for folders.
  76. * Added amr sound type support.
  77. *
  78. * Revision 1.1.2.1  2003/10/29 09:20:50  z_stoichev
  79. * Initial checkin.
  80. *
  81. }
  82.  
  83. interface
  84.  
  85. uses
  86.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  87.   ExtCtrls, VirtualTrees, TntComCtrls, Menus, Placemnt;
  88.  
  89. type
  90.   TfrmExplore = class(TFrame)
  91.     ListItems: TVirtualStringTree;
  92.     NoItemsPanel: TPanel;
  93.     PopupMenu1: TPopupMenu;
  94.     Explore1: TMenuItem;
  95.     newmsg1: TMenuItem;
  96.     newcall1: TMenuItem;
  97.     N3: TMenuItem;
  98.     Delete1: TMenuItem;
  99.     N4: TMenuItem;
  100.     New1: TMenuItem;
  101.     Note1: TMenuItem;
  102.     Bookmark1: TMenuItem;
  103.     sms1: TMenuItem;
  104.     person1: TMenuItem;
  105.     download1: TMenuItem;
  106.     FormStorage1: TFormStorage;
  107.     Upload1: TMenuItem;
  108.     N5: TMenuItem;
  109.     Properties1: TMenuItem;
  110.     N7: TMenuItem;
  111.     ActivatePr1: TMenuItem;
  112.     ChatContact1: TMenuItem;
  113.     SendandReceive1: TMenuItem;
  114.     N1: TMenuItem;
  115.     AddToPhonebook1: TMenuItem;
  116.     NewGroup1: TMenuItem;
  117.     procedure ListItemsGetImageIndex(Sender: TBaseVirtualTree;
  118.       Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
  119.       var Ghosted: Boolean; var ImageIndex: Integer);
  120.     procedure ListItemsGetText(Sender: TBaseVirtualTree;
  121.       Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  122.       var CellText: WideString);
  123.     procedure Open1Click(Sender: TObject);
  124.     procedure Properties1Click(Sender: TObject);
  125.     procedure PopupMenu1Popup(Sender: TObject);
  126.   private
  127.     FRootNode: TtntTreeNode;
  128.     procedure Set_RootNode(const Value: TtntTreeNode);
  129.     { Private declarations }
  130.   public
  131.     { Public declarations }
  132.     property RootNode: TtntTreeNode read FRootNode write Set_RootNode default nil;
  133.   end;
  134.  
  135.   TExploreItem = record
  136.     name,descr,param: WideString;
  137.   end;
  138.   PExploreItem = ^TExploreItem;
  139.  
  140. implementation
  141.  
  142. uses uGlobal, Unit1;
  143.  
  144. {$R *.dfm}
  145.  
  146. procedure TfrmExplore.Set_RootNode(const Value: TtntTreeNode);
  147. var
  148.   i: integer;
  149.   s: string;
  150.   Node: PVirtualNode;
  151.   Item: PExploreItem;
  152. begin
  153.   FRootNode := Value;
  154.   ListItems.BeginUpdate;
  155.   try
  156.     ListItems.Clear;
  157.     ListItems.NodeDataSize := SizeOf(TExploreItem);
  158.     for i := 0 to FRootNode.Count-1 do begin
  159.       Node := ListItems.AddChild(nil);
  160.       Node.Dummy := FRootNode.Item[i].ImageIndex;
  161.       Item := ListItems.GetNodeData(Node);
  162.       Item.name := FRootNode.Item[i].Text;
  163.       case Node.Dummy of
  164.         1..3,5..7,19..22,30..35,39..43,46..50,56,57: begin
  165.           Item.descr := 'Folder';
  166.           Item.param := '';
  167.           continue;
  168.         end;
  169.         8: Item.descr := 'Contact';
  170.         9..13: Item.descr := 'Phone number';
  171.         24: Item.descr := 'Profile';
  172.         26,58: Item.descr := 'Group';
  173.         59: Item.descr := 'Bookmark';
  174.         27,36..38: begin  // if you change this see Form1.Remove1Click() too!!
  175.           s := ExtractFileExt(Item.name);
  176.           if (s = '.amr') then
  177.             Item.descr := 'Speech'
  178.           else
  179.           if (s = '.mid') or (s = '.imy') then
  180.             Item.descr := 'Sound'
  181.           else
  182.           if (s = '.gif') or (s = '.jpg') or (s = '.wbmp') then
  183.             Item.descr := 'Picture'
  184.           else
  185.           if (s = '.thm') then
  186.             Item.descr := 'Theme'
  187.           else
  188.             Item.descr := 'File';
  189.           Item.param := Format('%.1n Kb',[FRootNode.Item[i].StateIndex / 1024]);
  190.           continue;
  191.         end;
  192.         53..55: begin // calls
  193.           Item.descr := GetToken(TStrings(FRootNode.Data)[FRootNode.Item[i].StateIndex-1],1);
  194.         end;
  195.         else
  196.           Item.descr := 'Undefined';
  197.       end;
  198.       if FRootNode.Item[i].StateIndex <> -1 then
  199.         Item.param := IntToStr(FRootNode.Item[i].StateIndex)
  200.       else
  201.         Item.param := '';
  202.     end;
  203.   finally
  204.     if (Form1.Explorer.Selected = Form1.FindObexFolderNode(0)) or
  205.       (Form1.Explorer.Selected = Form1.FindObexFolderNode(1)) or
  206.       (Form1.Explorer.Selected = Form1.FindObexFolderNode(2)) then
  207.       ListItems.TreeOptions.SelectionOptions := ListItems.TreeOptions.SelectionOptions + [toMultiSelect]
  208.     else
  209.       ListItems.TreeOptions.SelectionOptions := ListItems.TreeOptions.SelectionOptions - [toMultiSelect];
  210.     ListItems.EndUpdate;
  211.     NoItemsPanel.Visible := FRootNode.Count = 0;
  212.   end;  
  213. end;
  214.  
  215. procedure TfrmExplore.ListItemsGetImageIndex(Sender: TBaseVirtualTree;
  216.   Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
  217.   var Ghosted: Boolean; var ImageIndex: Integer);
  218. begin
  219.   if Column = 0 then
  220.     if (Kind = ikNormal) or (Kind = ikSelected) then
  221.       ImageIndex := Node.Dummy;
  222. end;
  223.  
  224. procedure TfrmExplore.ListItemsGetText(Sender: TBaseVirtualTree;
  225.   Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  226.   var CellText: WideString);
  227. var
  228.   Item: PExploreItem;
  229. begin
  230.   Item := ListItems.GetNodeData(Node);
  231.   case Column of
  232.     0: CellText := Item.name;
  233.     1: CellText := Item.descr;
  234.     2: CellText := Item.param;
  235.   end;
  236. end;
  237.  
  238. procedure TfrmExplore.Open1Click(Sender: TObject);
  239. var
  240.   Item: PExploreItem;
  241.   Node: PVirtualNode;
  242.   Child: TTntTreeNode;
  243. begin
  244.   Node := ListItems.FocusedNode;
  245.   if Node <> nil then begin
  246.     Item := ListItems.GetNodeData(Node);
  247.     Child := Form1.FindExplorerChildNode(Item.name);
  248.     if Child <> nil then Form1.Explorer.Selected := Child;
  249.   end;
  250. end;
  251.  
  252. procedure TfrmExplore.Properties1Click(Sender: TObject);
  253. var
  254.   Item: PExploreItem;
  255.   Node: PVirtualNode;
  256.   Child: TTntTreeNode;
  257. begin
  258.   Node := ListItems.FocusedNode;
  259.   if Node <> nil then begin
  260.     Item := ListItems.GetNodeData(Node);
  261.     Child := Form1.FindExplorerChildNode(Item.name);
  262.     if Child <> nil then Form1.ShowExplorerProperties(Child);
  263.   end
  264.   else
  265.     Form1.ShowExplorerProperties(Form1.Explorer.Selected);
  266. end;
  267.  
  268. procedure TfrmExplore.PopupMenu1Popup(Sender: TObject);
  269. var
  270.   Item: PExploreItem;
  271.   Node: PVirtualNode;
  272.   Child: TTntTreeNode;
  273. begin
  274.   Properties1.Enabled := ListItems.SelectedCount <= 1;
  275.   Explore1.Enabled := Properties1.Enabled;
  276.   ActivatePr1.Visible := False;
  277.   if ListItems.SelectedCount = 1 then begin
  278.     Node := ListItems.FocusedNode;
  279.     if Node <> nil then begin
  280.       Item := ListItems.GetNodeData(Node);
  281.       Child := Form1.FindExplorerChildNode(Item.name);
  282.       if (Child <> nil) and (Child.ImageIndex = 24) then begin
  283.         ActivatePr1.Enabled := Child.Text <> Form1.cbProfile.Text;
  284.         ActivatePr1.Visible := True;
  285.       end;
  286.     end;
  287.   end;
  288. end;
  289.  
  290. end.
  291.